home *** CD-ROM | disk | FTP | other *** search
/ Deutsche Edition 1 / Deutsche Edition 1.iso / amok / 051-060 / amok58 / fcs / fcs.mod < prev    next >
Text File  |  1993-11-04  |  4KB  |  106 lines

  1. (* ==================================================================== *)
  2. (* === FileCheckSum =================================================== *)
  3. (* ==================================================================== *)
  4. (*
  5.  
  6.   :Program.       FCS.MOD
  7.   :Contents.      calculates a 32-Bit CRC for a file
  8.   :Author.        Peter Fröhlich [phf]
  9.   :Copyright.     Public Domain
  10.   :Language.      Oberon (revised)
  11.   :Translator.    Amiga Oberon V2.01
  12.   :History.       V1.0 [phf] 09-Sep-1991 [created] twice as fast as CRC32.c
  13.  
  14.   :Support.       Idea by Garry Glendown, SYSOP@INSIDER.ZER. Thanx.
  15.   :Imports.       CRC.MOD
  16.   :Bugs.          none known, is a bit slow
  17.  
  18.   :Address.       Z-NET:P.FROEHLICH@NEXT-BOX.ZER
  19.   :Usage.         FCS <filename>
  20.   :Remark.        needs "crc.library"
  21.  
  22. *)
  23. (* ==================================================================== *)
  24.  
  25. MODULE FCS;
  26.  
  27. (* ==================================================================== *)
  28. (* === Imports ======================================================== *)
  29. (* ==================================================================== *)
  30.  
  31. IMPORT
  32.   arg : Arguments,
  33.     d : Dos,
  34.    io : io,
  35.         CRC,
  36.   sys : SYSTEM;
  37.  
  38. (* ==================================================================== *)
  39. (* === Constants ====================================================== *)
  40. (* ==================================================================== *)
  41.  
  42. CONST
  43.   blockSize = 8192;
  44.  
  45. (* ==================================================================== *)
  46. (* === Variables ====================================================== *)
  47. (* ==================================================================== *)
  48.  
  49. VAR
  50.   fileName : ARRAY 256 OF CHAR;
  51.   fileCRC : LONGINT;
  52.   buffer : ARRAY blockSize OF BYTE; (* made global for less stack usage *)
  53.  
  54. (* ==================================================================== *)
  55. (* === Procedures ===================================================== *)
  56. (* ==================================================================== *)
  57.  
  58. PROCEDURE CalcFileCRC(fileName: ARRAY OF CHAR; VAR (*OUT*) crc: LONGINT): BOOLEAN;
  59. (* $CopyArrays- *)
  60. VAR
  61.   file: d.FileHandlePtr;
  62.   len : LONGINT;
  63.   readSomething : BOOLEAN;
  64. BEGIN
  65.   file := d.Open(fileName,d.oldFile);
  66.   IF (file # NIL) THEN
  67.     crc := -1; readSomething := FALSE;
  68.  
  69.     REPEAT
  70.       len := d.Read(file,buffer,blockSize);
  71.       IF (len > 0) THEN
  72.         crc := CRC.CalcCRC32(sys.ADR(buffer),crc,len);
  73.         readSomething := TRUE;
  74.       END;
  75.     UNTIL (len < blockSize);
  76.  
  77.     IF d.Close(file) THEN END;
  78.     RETURN readSomething;
  79.   ELSE
  80.     RETURN FALSE;
  81.   END;
  82. END CalcFileCRC;
  83.  
  84. (* ==================================================================== *)
  85.  
  86. (* ==================================================================== *)
  87. (* === Main =========================================================== *)
  88. (* ==================================================================== *)
  89.  
  90. BEGIN (* FCS *)
  91.   io.WriteString("FileCheckSum V1.0 [PD] 09-Sep-1991 --- by Nephthys Software, P.Fröhlich.\n");
  92.   IF (arg.NumArgs() = 1) THEN
  93.     arg.GetArg(1,fileName);
  94.     IF CalcFileCRC(fileName, fileCRC) THEN
  95.       io.WriteString("File: \[1m"); io.WriteString(fileName);
  96.       io.WriteString("\[m\nCRC-32: \[1m"); io.WriteHex(fileCRC,8);
  97.       io.WriteString("\[m\n");
  98.     ELSE
  99.       io.WriteString("FCS: Error while calculating checksum.\n");
  100.     END;
  101.   ELSE
  102.     io.WriteString("FCS: Usage: FCS <filename>.\n");
  103.   END;
  104. END FCS.
  105. (* ==================================================================== *)
  106.